//
//  JXLHomeTableViewController.swift
//  MicroBlog
//
//  Created by 贾晓磊 on 16/9/19.
//  Copyright © 2016年 贾晓磊. All rights reserved.
//

import UIKit
import YYModel

//  重用标记
private let JXLHomeTableViewCellIndentifier = "JXLHomeTableViewCellIndentifier"


class JXLHomeTableViewController: JXLVisitorTableViewController {

    //懒加载，纪录数据源
    //lazy var statusList = [JXLStatus]()
    //var用对应的ViewModel对象
 fileprivate lazy var statusListViewModel:JXLStatusListViewModel = JXLStatusListViewModel()
   
    //上拉加载
fileprivate lazy var pullupView: UIActivityIndicatorView = {
      
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
        
        view.color = UIColor.red
        return view
        
    }()
    
    //下拉刷新
    fileprivate lazy var pulldownCtr: JXLRefreshControl = {
        
        let view = JXLRefreshControl()
        //添加事件
        view.addTarget(self, action: #selector(pulldownRefreshing), for: .valueChanged)
        
        return view
        
    }()
    
    //tipLabel显示加载多少条数据
    fileprivate lazy var tipLabel: UILabel = {
        let label = UILabel(fontSize: 12, textColor: UIColor.white)
        label.backgroundColor = UIColor.orange
        label.textAlignment = .center
        label.text = "没有加载到最新的微博数据"
        label.isHidden = true
        return label
        
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        if !isLogin {
            visitorView?.updatevisitorInfo(message: nil, imageName: nil)
        } else {
            //表示登录，加载微博数据
            setupTableView()
            loadData()
            setupUI()
        }
       
    }

    //添加tipLabel，设置约束
   private func setupUI() {
        if let nav = self.navigationController {
            //  把tipLabel添加到导航栏下面
nav.view.insertSubview(tipLabel, belowSubview: nav.navigationBar)
            //  设置其与导航栏底部对齐
            //  nav.navigationBar.frame.maxY获取最大y轴 -> swift 3.0
tipLabel.frame = CGRect(x: 0, y: nav.navigationBar.frame.maxY - 35, width: nav.navigationBar.width, height: 35)
 
        }
    }
    
    //MARK: 设置UITableView 的相关操作
   private func setupTableView() {
        //  UITableViewCell.self 表示获取 Class
        tableView.register(JXLHomeTableViewCell.self, forCellReuseIdentifier: JXLHomeTableViewCellIndentifier)
    
    //设置tableView自动计算行高
    tableView.rowHeight = UITableViewAutomaticDimension
    //设置预估行高
    tableView.estimatedRowHeight = 200
    
    //去掉分割线
    tableView.separatorStyle = .none
    //添加上拉加载控件
    tableView.tableFooterView = pullupView
    //添加下拉刷新控件,两种方法
    tableView.addSubview(pulldownCtr)
    //self.refreshControl = pulldownCtr
    }
    
    //MARK: 结束刷新数据
    private func endRefreshing() {
        //  结束刷新
        pullupView.stopAnimating()
        //pulldownView.endRefreshing()
        //  结束自定义下拉结束
        pulldownCtr.endRefreshing()

    }

    
    //MARK:  加载首页微博数据
    func loadData() {
        statusListViewModel.loadData(isPullup: pullupView.isAnimating) { (isSccessful, message) in
            //print(message)
            
            //如果不是上拉加载，tipLabel 开启动画
            if !self.pullupView.isAnimating {
                self.startAnimation(message: message)
            }
            //结束刷新
            self.endRefreshing()
            
            if isSccessful {
            //加载成功，刷新数据
                self.tableView.reloadData()
            }
        }
    }
    
     //  以下代码已经抽取到HMStatusListViewModel里面
//    //加载首页数据
//    func loadData() {
//        //从用户模型中获取
//        let accessToken = JXLUserAccountViewModel.sharedUserAccountViewModel.accessToken!
//        
//        JXLNetworkingTools.sharedTools.requestStatuses(accessToken: accessToken) { (response, error) in
//            
//            if error != nil {
//                print("网络请求异常: \(error)")
//                return
//            }
//            
//            //把response尝试转成字典，
//            guard let dict = response as? [String: Any] else {
//                print("你不是一个正确的字典格式")
//                return
//            }
//            
//            //代码执行到此，表示字典的格式没有问题，尝试转成数组
//            guard let statusArray = dict["statuses"] as? [[String: Any]] else {
//                print("你不是一个正确的字典格式")
//                return
//            }
//            
////            //创建临时数组保存对象
////            var tempArray = [JXLStatus]()
////            //代码执行到此，表示转数组没有问题，遍历数组，字典转模型
////            for statusDic in statusArray {
////                let status = JXLStatus(dict: statusDic)
////                tempArray.append(status)
////                
////            }
////            //  记录返回的数组模型,重新加载数据
////            
////            self.statusList = tempArray
//            //  使用yymodel进行数组字典转成数组模型
//            let tempArray = NSArray.yy_modelArray(with: JXLStatus.self, json: statusArray) as! [JXLStatus]
//            
//            self.statusList = tempArray
//            
//            self.tableView.reloadData()
//
//            
//            
//
//        }
//    }

    // MARK: 下拉刷新事件
    @objc private func pulldownRefreshing() {
        
        loadData()
    }
    
    //tipLabel开启动画
    private func startAnimation(message: String) {
        
        //  当前tipLabel如果显示表示正在执行动画,那么不需要再次执行
        if tipLabel.isHidden == false {
            return
        }
        
        tipLabel.text = message
        //显示label
        tipLabel.isHidden = false
        
        UIView.animate(withDuration: 1, animations: {
            //向下偏移35
            self.tipLabel.transform = CGAffineTransform(translationX: 0, y: 35)
            }) { (_) in
                UIView.animate(withDuration: 1, animations: { 
                    //动画结束，tipLabel收起
                    self.tipLabel.transform = CGAffineTransform.identity
                    }, completion: { (_) in
                        //tipLabel隐藏
                        self.tipLabel.isHidden = true

                })
                
        }
}
}

//MARK: UITableViewDataSource 数据源代理方法
extension JXLHomeTableViewController {
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return statusListViewModel.statusList.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier:JXLHomeTableViewCellIndentifier, for: indexPath) as! JXLHomeTableViewCell
        
//        cell.textLabel?.text = statusListViewModel.statusList[indexPath.row].user?.screen_name
         cell.statusViewModel = statusListViewModel.statusList[indexPath.row]
        
       //  取消选中的颜色

        cell.selectionStyle = .none
        return cell
    }
    
    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        
        if indexPath.row == statusListViewModel.statusList.count - 1 && !pullupView.isAnimating {
            
            pullupView.startAnimating()
            print("已经滚动到最后一个cell了")
            
            loadData()
        }
    }
}

